package com.agile.leetcode.jdk8.offsetdatetime;

import org.junit.Test;

import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;

/**
 * 带偏移时间的demo
 *
 * @Author KD
 * @Date 2021/1/23 9:49
 */
public class OffsetDateTimeDemo {
    @Test
    public void test1() {
        // 本地时间偏移量 2021-01-23T09:50:45.607+08:00精确到纳秒，+8表示北京时间东八区
        OffsetDateTime offsetDateTime = OffsetDateTime.now();
        System.out.println(offsetDateTime);
        // 纽约时区的本地时间
        OffsetDateTime dateTime = OffsetDateTime.now(ZoneId.of("America/New_York"));
        // 2021-01-23T03:12:59.107-05:00 西五区
        System.out.println(dateTime);

    }

    /**
     * 格式化
     */
    @Test
    public void test2() {
        // 默认时区
        OffsetDateTime dateTime = OffsetDateTime.now(ZoneId.systemDefault());
        // 格式化
        String format = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT, FormatStyle.SHORT).format(dateTime);
        System.out.println(format);

        String dateTimeStrParam = "2021-01-17T18:00:00+07:00";
        System.out.println("解析后输出：" + OffsetDateTime.parse(dateTimeStrParam));
    }

    /**
     * localDateTime与offSetDateTime的转换
     */
    @Test
    public void test3() {
        // 本地时间
        LocalDateTime localDateTime = LocalDateTime.now(ZoneId.systemDefault());
        // 输出
        System.out.println("本地时间是" + localDateTime);
        //
        OffsetDateTime offsetDateTime = OffsetDateTime.of(localDateTime, ZoneOffset.ofHours(-5));
        System.out.println(offsetDateTime);

        OffsetDateTime dateTime = OffsetDateTime.ofInstant(localDateTime.toInstant(ZoneOffset.ofHours(8)), ZoneOffset.ofHours(-5));
        System.out.println("西五区对应的时间是"+dateTime);
        // offSetDateTime转换为localDateTime
        System.out.println(dateTime.toLocalDateTime());
    }


}
